import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';
import { createHtmlPlugin } from 'vite-plugin-html';
// import Components from 'unplugin-vue-components/vite';
import viteCompression from 'vite-plugin-compression';

export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd());

  return {
    base: './', // 部署路径，可根据实际情况修改

    plugins: [
      vue(),
      // 需加载组件，无需手动 import
      // Components({
      //   dirs: ['src/components'],
      //   dts: 'src/components.d.ts',
      //   resolvers: [ElementPlusResolver()],
      // }),
      // HTML 插件，可注入环境变量到 HTML
      createHtmlPlugin({
        inject: {
          data: {
            title: env.VITE_APP_TITLE || 'Vite6 + Vue3',
          },
        },
      }),
      // 启用 gzip 压缩，减少包体积
      viteCompression(),
    ],

    resolve: {
      // 路径别名优化
      alias: {
        '@': path.resolve(__dirname, 'src'), // 允许使用 `@` 代替 `src/`
      },
    },

    build: {
      target: 'esnext', // 指定支持的 JS 版本
      outDir: 'dist', // 输出目录
      assetsDir: 'assets', // 资源文件存放目录
      minify: 'terser', // 使用 Terser 进行代码压缩
      terserOptions: {
        compress: {
          drop_console: true, // 移除 console.log
          drop_debugger: true, // 移除 debugger
        },
      },
      rollupOptions: {
        output: {
          manualChunks(id) {
            if (id.includes('node_modules')) {
              return id.toString().split('node_modules/')[1].split('/')[0].toString();
            }
          },
        },
      },
    },

    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@import "@/styles/global.scss";`, // 自动引入全局 SCSS
        },
      },
    },

    optimizeDeps: {
      include: ['vue', 'vue-router', 'pinia'], // 预编译依赖
    },
  }
})